﻿using System.Security.Claims;

namespace Net8.Project.Common.HttpContextUser
{
    /// <summary>
    /// 用户上下文接口，定义获取当前用户信息及相关操作的方法。
    /// </summary>
    public interface IUser
    {
        /// <summary>
        /// 当前用户名称
        /// </summary>
        string Name { get; }

        /// <summary>
        /// 当前用户ID
        /// </summary>
        long ID { get; }

        /// <summary>
        /// 当前用户所属租户ID
        /// </summary>
        long TenantId { get; }

        /// <summary>
        /// 判断当前用户是否已通过身份验证
        /// </summary>
        /// <returns>已认证返回true，否则返回false</returns>
        bool IsAuthenticated();

        /// <summary>
        /// 获取当前用户的所有声明（Claims）
        /// </summary>
        /// <returns>声明集合</returns>
        IEnumerable<Claim> GetClaimsIdentity();

        /// <summary>
        /// 根据声明类型获取当前用户的声明值列表
        /// </summary>
        /// <param name="claimType">声明类型</param>
        /// <returns>声明值列表</returns>
        List<string> GetClaimValueByType(string claimType);

        /// <summary>
        /// 获取当前请求的Token字符串
        /// </summary>
        /// <returns>Token字符串</returns>
        string GetToken();

        /// <summary>
        /// 从Token中获取指定类型的用户信息
        /// </summary>
        /// <param name="claimType">声明类型</param>
        /// <returns>用户信息列表</returns>
        List<string> GetUserInfoFromToken(string claimType);
    }
}
